oracle 使用listagg函数报 ORA |
您所在的位置:网站首页 › oracle concatenation › oracle 使用listagg函数报 ORA |
由于oracle 19c不能使用wm_concat函数,只能使用listagg进行列转行。 在使用时遇到如下错误 ORA-01489: result of string concatenation is too long SELECT t.tablespace_name, listagg(t.table_name, ',') WITHIN GROUP(ORDER BY table_name) over(PARTITION BY tablespace_name) clause FROM user_tables t;错误是由于oracle对字符串长度有限制,长度不能超过4000.超过4000以后需要转为clob类型。 解决办法使用oracle的另外一个函数xmlagg。 SELECT t.tablespace_name, xmlagg(xmlparse(content t.table_name || ',' wellformed) ORDER BY t.table_name).getclobval() FROM user_tables t GROUP BY t.tablespace_name;查询结果 看到合并后的内容后面多了一个连接符。所以还可以使用rtrim函数去掉多余的连接符 SELECT t.tablespace_name, rtrim(xmlagg(xmlparse(content t.table_name || ',' wellformed) ORDER BY t.table_name).getclobval(), ',') FROM user_tables t GROUP BY t.tablespace_name;增加rtrim函数后,连接内容不再有多余的连接符 但是使用xmlagg函数将内容转为clob后也会有个缺点,就是clob不能使用聚合函数,也不能进行group by 或者去重后。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |